[TOC]

1 FEKit Mock 配置

1.1 FEKit Mock 启动方式

  • FEkit Mock是fekit server的一个额外功能
  • 在工程目录的上一级目录启动
  • fekit server -m ./projectA/path/to/mockconf.js 启动mock server。
  • 可以通过fekit server -h 查看相应的帮助,-m参数跟--mock一致

1.2 FEKit Mock配置文件

  • 配置文件后缀可以自己定义,比如常见的.conf 或者.js,推荐使用.js这样在各大编辑器里面能得到更好的高亮支持。
  • 配置规则支持两种方式
    • key=>value形式, 其中key为路径的匹配规则,value为对应的mock数据指向;
    • pattern=>respondwith形式,其中pattern为路径匹配规则,respondwith为对应的mock数据指向;
  • 配置的规则(keypattern)支持全匹配和正则匹配,mock数据指向支持.json,.mockjson,.js以及带http开头的全URL接口数据代理,规则文件的相对路径是相对于mock配置的路径。
  • 规则从前至后匹配,但key=> value形式的规则顺序无法保证(但优先级始终低于rules规则),如果有交叉规则需要通过顺序来控制,建议用rules形式的配置。
  • 配置文件会被解析为CommonJS模块,同时支持更详尽的rules规则配置,所以一个配置文件内容大致如下:
1
2
3
4
5
6
7
8
module.exports = {
'/uri/to/api':'relative/path/to/mock/data/file',
rules:[{
pattern: "/uri/pattern/to/match",
respondwith:'relative/path/to/mock/data/file',
jsonp:'jsCallback'
}]
}

1.3 FEKit Mock支持的Mock数据类型及配置方式

这里我们通过不同的支持方式来模拟一个list接口(/api/list.json )的数据(listData.json),数据如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
"ret":true,
"data":[{
"name":"Li Lei",
"email":"lilei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
},{
"name":"Han Meimei",
"email":"hanmeimei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}]
}
1.3.1 对于URL(/api/list.json)的匹配规则的配置

以下四种任意一种配置方式都可以匹配到这个规则:

1
2
3
4
5
6
7
8
9
10
11
module.exports = {
'/api/list.json':'./data/listData.json',
'^\\/api\\/\\w+\\.json.*^^^':'./data/listData.json',
rules:[{
pattern:'/api/list.json',
respondwith:'./data/listData.json'
},{
pattern:/^\/api\/\w+\.json.*$/,
respondwith:'./data/listData.json'
}]
}
1.3.2 jsonp规则的配置
  • 在mock的规则中需要处理jsonp的配置默认为callback,可以自定义
  • 在请求的url中需要增加相关的参数callback,这两者需要一致
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
module.exports = {
rules:[{
pattern:'/api/list.json',
respondwith:'./data/listData.json',
jsonp:'thecallback'
},{
pattern:/^\/api\/\w+\.json.*$/,
respondwith:'./data/listData.json',
jsonp:'thecallback',
},{
pattern:/^\/api\/\w+\.json.*$/,
respondwith:function(req,res,context){
//这里可以有更多其他的处理过程
var callbackKey = 'thecallback'
var dataStr = JSON.stringify({
"ret": true,
"data": [{
"name": "Li Lei",
"email": "lilei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}, {
"name": "Han Meimei",
"email": "hanmeimei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}]
});
var jsonpCallback = req.query[callbackKey];
if(jsonpCallback){
res.end([jsonpCallback,'(',dataStr,')'].join(''))
}else{
res.end(dataStr)
}
}
}]
}
1.3.3 对于数据匹配规则的配置
1.3.3.1 json 规则

直接返回原数据文件(listData.json)内容

1.3.3.2 mockjson 规则

参考mockJSON github,网站挂掉了,直接clone代码看文档,这个可以更加灵活的配置数据模板,根据模板动态生成随机数据,比如我们这里的规则(listData.mockjson)如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
"ret|0-1":true,
"data|2-5":[{
"name":"@LAST_NAME @MALE_FIRST_NAME",
"email":"@EMAIL",
"registerDateTime": "@DATE_YYYY-@DATE_MM-@DATE_DD @TIME_HH:@TIME_MM:@TIME_SS"
},{
"name":"@LAST_NAME @FEMALE_FIRST_NAME",
"email":"@EMAIL",
"registerDateTime": "@DATE_YYYY-@DATE_MM-@DATE_DD @TIME_HH:@TIME_MM:@TIME_SS"
}]
}
1.3.3.3 js规则

直接控制response对象传入数据,这里可以有更灵活的处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module.exports = function (req, res, context) {
//这里可以有更多其他的处理过程
res.end(JSON.stringify({
"ret": true,
"data": [{
"name": "Li Lei",
"email": "lilei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}, {
"name": "Han Meimei",
"email": "hanmeimei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}]
}))
}
1.3.3.4 http 数据转发规则

通过直接获取远端接口数据并将数据作为mock数据返回,这里只支持http,不支持https,因为没有考虑相关的证书输入。

数据的匹配规则如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module.exports = {
'/api/list.json':'./data/listData.json',
'/api/list.json':'./data/listData.mockjson',
'/api/list.json':'./data/listData.js',
'/api/list.json':'http://testdomain.com.cn/resp/listapi.json',
rules: [{
pattern:'/api/list.json',
respondwith:'./data/listData.json'
}, {
pattern:'/api/list.json',
respondwith:'./data/listData.mockjson'
}, {
pattern:'/api/list.json',
respondwith:'./data/listData.js'
}, {
pattern:'/api/list.json',
respondwith:'http://testdomain.com.cn/resp/listapi.json'
},{
pattern: '/api/list.json',
respondwith: function (req, res, context) {
//这里可以有更多其他的处理过程
res.end(JSON.stringify({
"ret": true,
"data": [{
"name": "Li Lei",
"email": "lilei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}, {
"name": "Han Meimei",
"email": "hanmeimei@test.com",
"registerDateTime": "2020-10-01 22:11:11"
}]
}))
}
}]
}

2 FEKit Proxy 代理配置

  • 配置文件在~/fekit.hosts,使用fekit server -o 启动代理,会有相应的提示

  • 启动端口在10180,将浏览器的代理设置到这个端口上面就可以玩起来了,用这里面的host和转发规则

  • 配置的内容参考

    1
    2
    3
    4
    5
    # 简单的host配置
    127.0.0.1 test.test.com

    # 请求转发的配置
    proxy_pass http://q.qunarzz.com/(.*) http://127.0.0.1:7778/$1

    代码地址

  • 相关的代码可以在这里找到

3 参考资料


  1. FEKit Mock 文档
  2. FEKit 使用教程
  3. FEKit Mock源码

最后更新: 2022年03月02日 03:32

原始链接: http://rawbin-.github.io/dev-tools/fekit/2017-07-01-fekit-mock-ref/

× 赞赏这个人~
打赏二维码